package br.ufrj.dcc;

import java.util.List;

/**
 * Interface that must be implemented in order
 * to receive parameters from the application GUI.
 * @author Pedro Rougemont
 * @author Fabricio Firmino
 * 
 */
public interface AbstractLearningProblem {

	/**
	  * Sets the list of attribute names
	  * @param attributes given by the example
	  */
	  void declareAttributes(List<String> attributes);
	
	  /**
	  * Sets the goal attribute of the given problem.
	  * @param attribute given by the example
	  */
	  void declareGoalAttribute(String attribute);
	  
	  /**
	  * This methods works such as a Prolog Assert.
	  * The first parameter is the attribute name,
	  * the other is a list of the assumable values
	  * (Domain) of this attribute.
	  * @param attribute name
	  * @param attributeDomain values 
	  */
	 void declareAttributeDomain(String attribute, List<String> attributeDomain);
	
	 /**
	  * It works much like the declareAttribute method,
	  * except that the goal attribute, which is being availed
	  * by the decision tree, is the one being set here.
	  * @param attributeDomain values
	  */
	 void declareGoalAttributeDomain(List<String> attributeDomain);
	 
	 /**
	  * Sets the number of input entries (rows) to be
	  * inserted for training.
	  * @param size of the entry set
	  */
	 void setNumberOfTrainingEntries(int size);
	 
	 /**
	  * Declares input entries to the algorithym, 
	  * It receives the attribute name, and its respective values 
	  * for each entry of the training set. These values must respect
	  * the domain previously defined for it. 
	  * The order of elements in the attributeColumn list matters.
	  * @param attribute name
	  * @param attributeColumn entire set of values for this attribute in the input
	  */
	 void declareExamples(String attribute, List<String> attributeColumn);
	 
	 /**
	  * Sets the column that represents the values assumed 
	  * by the goal attribute in each row of my training set.
	  * @param attributeColumn of goals
	  */
	 void declareGoals(List<String> attributeColumn);
	
}
